package com.example.export.config;

import com.example.export.enums.ResultCodeEnum;
import com.example.export.vo.ResultVO;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常类
 */
@RestControllerAdvice
public class ExceptionControllerAdvice {

    //指定异常类型捕捉，统一响应体，规范响应码，并根据自定义注解返回我们定制的code和msg。
    @ExceptionHandler(BindException.class)
    public ResultVO<String> bindExceptionHandler(BindException exception) throws NoSuchFieldException {
        // 从异常对象中获取错误信息
        String errorMsg = exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        //获取异常的类对象
//        Class<?> aClass = exception.getBindingResult().getTarget().getClass();
        //获取属性名：nickName
//        String field = exception.getBindingResult().getFieldError().getField();
////        String fieldName = exception.getBindingResult().getFieldError().getObjectName();//获取对象名: user
//        //获取被声明属性所有信息：得到一个属性对象Field
//        Field declaredField = aClass.getDeclaredField(field);
        return new ResultVO<>(ResultCodeEnum.VALIDATE_FAILED, errorMsg);
    }

}
